Adressenpflege

Mit diesem kleinen Programm können Sie einfach eine Adresse anzeigen oder bearbeiten und speichern. Die Adresse muss im Selektionsbild eingetragen werden, kann aber natürlich einfach zu einzelnen Objekten ermittelt werden: Kunden, Lieferanten, Werke usw.

Beschreibung

Das Programm liest die im Selektionsbild eingetragene Adressnummer ein. Wenn sie nicht vorhanden ist und P_EDIT gesetzt ist, dann wird sie angelegt.

Feldsteuerung

Vor dem eigentlich Dialog werden noch die zu verwendenden Felder definiert. Um zu wissen, welche Felder mit den Zahlen verknüpft sind, rufen Sie in einem Standard-Dialog für das Feld die F1-Hilfe auf. Machen Sie dann einen Doppelklick auf die Bildnummer (0201 z.B.). Sie gelangen dann in den Screenpainter. Hier sehen Sie in der Elementliste auf dem Tabreiter “ModifGruppen/ Funktionen” im Feld “Gruppe4” die entsprechende Nummer.

Objektverknüpfung

Um eine neue Nummer zu ermitteln, müssen Sie das Objekt angeben für das die Adresse verwendet wird. Schauen Sie am besten in der Tabelle TSADRV für gültige Objekte. Die Tabelle kann mit der Transaktion SM30 gepflegt werden. Sie können also auch eigene Objekte definieren.

Coding

*** data definition
DATA gt_handle            TYPE STANDARD TABLE OF addr1_dia
                               WITH NON-UNIQUE DEFAULT KEY.
DATA gs_handle            LIKE LINE OF gt_handle.
DATA gv_maint_mode        LIKE gs_handle-maint_mode.
DATA gv_okcode            TYPE syucomm.
DATA gt_values            TYPE STANDARD TABLE OF addr1_data.
DATA gv_offset            TYPE i.
DATA gs_address_reference LIKE addr_ref.
DATA gs_addr1_val         TYPE addr1_val.
DATA gs_addr1_sel         TYPE addr1_sel.
DATA gs_fisel             TYPE addr1_fsel-fisel.

*** makro for field settings
DEFINE cf.
  gv_offset = &1 - 1.
  gs_fisel+gv_offset(1) = &2.
END-OF-DEFINITION.

PARAMETERS p_adrnr TYPE adrnr.
PARAMETERS p_edit AS CHECKBOX.

START-OF-SELECTION.

*** set parameters
  gs_addr1_sel-addrhandle = space.
  gs_addr1_sel-addrnumber = p_adrnr.

*** read address
  CALL FUNCTION 'ADDR_GET'
    EXPORTING
      address_selection = gs_addr1_sel
    IMPORTING
      address_value     = gs_addr1_val
    EXCEPTIONS
      parameter_error   = 1
      address_not_exist = 2
      version_not_exist = 3
      internal_error    = 4
      OTHERS            = 5.
  IF sy-subrc = 0.
    IF p_edit <> space.
      gv_maint_mode  = 'CHANGE'.
    ELSE.
      gv_maint_mode  = 'DISPLAY'.
    ENDIF.
    gs_handle-handle     = space.
  ELSEIF p_edit <> space.
    gv_maint_mode    = 'CREATE'.
    gs_handle-handle = 'TRICKTRESOR'.
  ELSE.
    MESSAGE i000(oo) WITH 'Address does not exist.'.
  ENDIF.

*** prepare address handle
  gs_handle-owner      = 'X'.
  gs_handle-addrnumber = gs_addr1_sel-addrnumber.
  gs_handle-maint_mode = gv_maint_mode.
  gs_handle-addr_group = 'SD01'.
  gs_handle-country    = 'DE'.
  APPEND gs_handle TO gt_handle.

*** prepare field selection
  CLEAR gs_fisel WITH '-'.
  cf: 002 ' ',   " Name
      004 ' ',                                              " Name2
      010 ' ',   " Street
      016 ' ',   " Country
      022 ' ',   " House number
      029 '#',   " Building
      030 '#',   " Floor
      031 '#',   " Room number
      012 ' ',   " Postal code
      013 ' ',   " Postal code
      014 ' ',   " City
      019 ' ',   " Telefon
      020 ' '.   " Fax

*** set field selection
  CALL FUNCTION 'ADDR_DIALOG_PREPARE'
    EXPORTING
      field_selection = gs_fisel
    EXCEPTIONS
      internal_error  = 1
      OTHERS          = 2.

*** maintain address
  CALL FUNCTION 'ADDR_DIALOG'
    IMPORTING
      ok_code           = gv_okcode
    TABLES
      number_handle_tab = gt_handle
      values            = gt_values
    EXCEPTIONS
      address_not_exist = 1
      group_not_valid   = 2
      parameter_error   = 3
      internal_error    = 4
      OTHERS            = 5.

  IF sy-subrc = 0.
    IF gv_okcode = 'CONT'.
      CASE gv_maint_mode.
*** Create address
        WHEN 'CREATE'.
*** set references for address type
          gs_address_reference-appl_table = 'VBUK'.
          gs_address_reference-appl_field = 'VBELN'.
          gs_address_reference-appl_key   = '$000000001'.
          gs_address_reference-addr_group = gs_handle-addr_group.
          gs_address_reference-owner      = 'X'.
*** get new address number
          CALL FUNCTION 'ADDR_NUMBER_GET'
            EXPORTING
              address_handle    = gs_handle-handle
              address_reference = gs_address_reference
            IMPORTING
              address_number    = p_adrnr
            EXCEPTIONS
              OTHERS            = 4.
          IF sy-subrc > 0.
            WRITE: / 'Error ADDR_NUMBER_GET'.
            STOP.
          ENDIF.
      ENDCASE.
*** save address
      CALL FUNCTION 'ADDR_MEMORY_SAVE'
        EXCEPTIONS
          address_number_missing = 1
          person_number_missing  = 2
          internal_error         = 3
          database_error         = 4
          reference_missing      = 5
          OTHERS                 = 6.
      IF sy-subrc = 0.
        WRITE: / 'Address saved:', p_adrnr.
      ELSE.
        WRITE: / 'Error ADDR_MEMORY_SAVE, SUBRC=', sy-subrc.
      ENDIF.
    ELSE.
*** Dialog cancelled
      WRITE: / 'Dialog cancelled'.
    ENDIF.
  ELSE.
*** Error in dialog
    WRITE: / 'Error ADDR_DIALOG'.
  ENDIF.

 

 

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)

COMMENTS

  • <cite class="fn">allgrind</cite>

    Hallo Enno,

    bin wirklich begeistert von dieser Seite und konnte schon viele Tricks verwenden und für mich anpassen.

    Dieser Trick bereitet mir aber etwas Kopfschmerzen,…
    Komischerweise können nur Adressen von Organisationen geändert werden. Private Adressen von Geschäftspartner leider nicht…
    Also alle Adressen die im Feld ADRC-PERS_ADDR ein X stehen haben,…

    Wie kann dieses Problem behoben werden?

    LG

Leave a Comment